// 知识点1：lambda的捕获方式：值捕获、引用捕获、隐式捕获，在[]中，
// 值捕获：被捕获的变量在lambda创建时拷贝

// 引用捕获：在lambda中使用引用捕获的变量时，实际上所使用的是引用对应的变量，也就可以在lambda函数体内修改该值。但是由于lambda捕获的是局部变量，必须保证函数结束后、lambda所调用的局部变量的地址仍然存在。

// 隐式捕获：让编译器根据lambda体中的代码推断我们需要使用哪些变量。&表示引用捕获，=表示值捕获。显示捕获与隐式捕获混合使用时，必须捕获方式不同。

// 知识点2：尽量减少捕获的数据量，避免捕获可能导致的结果，避免引用、指针捕获。
#include <algorithm>
#include <iostream>
#include <numeric>
#include <string>
#include <vector>

using namespace std;

int main(int argc, char **argv) {
  string a[10] = {"diuwudh", "udh",  "dewiudh",     "wudh", "diutrwu",
                  "h",       "diuw", "diuwudhg257", "h",    "d"};
  vector<string> vec1(a, a + 10); //利用数组初始化vector
  cout << "长度大于6的字符串有"
       << count_if(vec1.begin(), vec1.end(),
                   [](string &s) { return s.size() > 6; })
       << "个";

  return 0;
}